package com.hjh.netty.elect.config;


import org.springframework.cglib.beans.BeanCopier;

import java.util.HashMap;
import java.util.Map;

/**
 * 对象拷贝工具类
 * @author zcj
 * @since 2021/2/24
 */
public class BeanCopierUtils {
 
    /**
     * 缓存beanCopier对象
     */
    private static final Map<String, BeanCopier> BEAN_COPIER_MAP = new HashMap<>();
 
    /**
     * 属性拷贝
     * @param source 源对象
     * @param target 目标对象
     */
    public static void copyProperties(Object source, Object target) {
        String beanKey = generateKey(source.getClass(), target.getClass());
        BeanCopier copier = BEAN_COPIER_MAP.get(beanKey);
        if (copier == null) {
            synchronized (BeanCopierUtils.class) {
copier = BEAN_COPIER_MAP.get(beanKey);
                if (copier == null) {
                    copier = BeanCopier.create(source.getClass(), target.getClass(), false);
                    BEAN_COPIER_MAP.put(beanKey, copier);
                } 
            }
        }
        copier.copy(source, target, null);
    }
 
    private static String generateKey(Class<?> sourceClass, Class<?> targetClass) {
        return sourceClass.toString() + targetClass.toString();
    }
}   